﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common.DataLayer;
using System.IO;
using Common.Forms;
using System.Windows.Forms;
using System.Drawing;

namespace Common.Tools
{
    public class DkFunkcije
    {
        public static string VratiDelovodniBroj(int delovodnik, 
                                                DateTime datum)
        {
            using (CommonDataContext dc = new CommonDataContext())
            {
                /*string broj = (from t in dc.Dokuments
                               where t.DelovodniBroj.Substring(t.DelovodniBroj.IndexOf("/") + 1, 4) == datum.Year.ToString()
                               && t.DelovodniBroj.Substring(t.DelovodniBroj.IndexOf("-") + 1, 10) == sifra
                               select t.DelovodniBroj.Substring(0, t.DelovodniBroj.IndexOf("/"))).Max() ?? "0";*/

                string sifra, broj;

                if (dc.Delovodniks.Where(t => t.DelovodnikId == delovodnik).Any())
                {
                     sifra = dc.Delovodniks.SingleOrDefault(t => t.DelovodnikId == delovodnik).Sifra.ToString();

                     broj = (from t in dc.Dokuments
                                   where t.DelovodniBroj.Substring(t.DelovodniBroj.IndexOf("/") + 1, 4) == datum.Year.ToString()
                                   && t.DelovodnikId == delovodnik
                                   select t.DelovodniBroj.Substring(0, t.DelovodniBroj.IndexOf("/"))).Max() ?? "0";
                     return int.Parse(broj) + 1 + "/" + datum.Year.ToString() + "-" + sifra;
                }
                else
                    return "nema";

                
            }
        }

        public static int IzborDelovodneKnjige()
        {
            int id = 0;
            CommonDataContext dc = new CommonDataContext();

            if (dc.Delovodniks.Where(t => t.Status).Count() == 0)
            {
                id = 0;
            }
            else if (dc.Delovodniks.Where(t => t.Status).Count() == 1)
            {
                id = dc.Delovodniks.Where(t => t.Status).SingleOrDefault().DelovodnikId;
            }
            else
            {
                try
                {
                    IzborDelovodneKnjige f = new IzborDelovodneKnjige();
                    if (f.ShowDialog() == DialogResult.OK)
                    {
                        id = f.id;
                    }
                }
                catch (Exception ex)
                {
                    MessageError.Show(ex.Message);
                }
            }

            return id;
        }

        public static int UpisiZaglavljeDokumenta(int vrstaDokumenta,
                                                    int dokumentTipId,
                                                    string brojPredmeta,
                                                    DateTime datumPrijema,
                                                    DateTime datum,
                                                    string naziv,
                                                    string opis,
                                                    bool PrikaziPoruku)
        {
            int dokumentId = 0;
            CommonDataContext dc = new CommonDataContext();
            string delovodniBroj;
            int delovodnik;

            try
            {
                Dokument dokument = new Dokument();

                delovodnik = IzborDelovodneKnjige();
                if (delovodnik == 0)
                {
                    MessageError.Show("Greška prilikom izbora delovodne knjige! Proverite da li postoji aktivna delovodna knjiga.");
                    dokumentId = 0;
                }
                else
                {
                    dokument.DelovodnikId = delovodnik;
                    dokument.VrstaDokumenta = vrstaDokumenta;
                    dokument.DokumentTipId = dokumentTipId;

                    delovodniBroj = VratiDelovodniBroj(delovodnik, datum);
                    dokument.DelovodniBroj = delovodniBroj;

                    dokument.BrojPredmeta = brojPredmeta;
                    dokument.DatumPrijema = datumPrijema;
                    dokument.Datum = datum;
                    dokument.Naziv = naziv;
                    dokument.Opis = opis;
                    dokument.BrojRegistratora = "";
                    dokument.LokacijaArhive = "";
                    dokument.Status = true;
                    dokument.KorisnikId = Common.Properties.Settings.Default.KorisnikId;
                    dokument.DatumRada = Common.Tools.SqlFunkcije.VratiTrenutnoVreme();

                    dokumentId = dokument.DokumentId;

                    dc.Dokuments.InsertOnSubmit(dokument);
                    dc.SubmitChanges();

                    if (PrikaziPoruku)
                    {
                        MessageInformation.Show("Dokument je uspešno zaveden po delovodnim brojem " + delovodniBroj + ".");
                    }
                }
            }
            catch (Exception ex)
            {
                MessageError.Show(ex.Message);
            }
            return dokumentId;
        }

        public static bool UpisiPrilogDokumenta(int dokumentId,
                                                    string naziv,
                                                    string tip,
                                                    byte[] sadrzaj,
                                                    bool PrikaziPoruku)
        {
            CommonDataContext dc = new CommonDataContext();
            bool rezultat = false;

            try
            {
                DokumentPrilog prilog = new DokumentPrilog();
                prilog.DokumentId = dokumentId;
                prilog.Naziv = naziv;
                prilog.Tip = tip;
                prilog.Sadrzaj = sadrzaj;
                prilog.KorisnikId = Common.Properties.Settings.Default.KorisnikId;
                prilog.DatumRada = Common.Tools.SqlFunkcije.VratiTrenutnoVreme();
                prilog.FileStreamId = Guid.NewGuid();

                dc.DokumentPrilogs.InsertOnSubmit(prilog);
                dc.SubmitChanges();

                if (PrikaziPoruku)
                {
                    MessageInformation.Show("Prilog je uspešno sačuvan u delovodnoj knjizi.");
                }

                rezultat = true;

            }
            catch (Exception ex)
            {
                MessageError.Show(ex.Message);
            }

            return rezultat;
        }


    }
}
